From a437901858a5750e401d6e5de7387f4383fd13e9 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 10 Feb 2025 11:57:21 +0800 Subject: [PATCH] shell_integration/macOS/FileProviderUIExt: Check locking is available on the server before attempting Signed-off-by: Claudio Cambra --- .../Locking/LockViewController.swift | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift index d93e2ec17..4ab55ccb3 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift @@ -7,6 +7,7 @@ import AppKit import FileProvider +import NextcloudCapabilitiesKit import NextcloudFileProviderKit import NextcloudKit import OSLog @@ -76,6 +77,20 @@ class LockViewController: NSViewController { stopIndicatingLoading() } + private func fetchCapabilities(account: Account, kit: NextcloudKit) async -> Capabilities? { + return await withCheckedContinuation { continuation in + kit.getCapabilities(account: account.ncKitAccount) { account, data, error in + guard error == .success, let capabilitiesJson = data?.data else { + self.presentError("Error getting server caps: \(error.errorDescription)") + continuation.resume(returning: nil) + return + } + Logger.lockViewController.info("Successfully retrieved server share capabilities") + continuation.resume(returning: Capabilities(data: capabilitiesJson)) + } + } + } + private func processItemIdentifier(_ itemIdentifier: NSFileProviderItemIdentifier) async { guard let manager = NSFileProviderManager(for: actionViewController.domain) else { fatalError("NSFileProviderManager isn't expected to fail") @@ -168,7 +183,12 @@ class LockViewController: NSViewController { nextcloudVersion: 25, groupIdentifier: "" ) - // guard let capabilities = await fetchCapabilities() else { + guard let capabilities = await fetchCapabilities(account: account, kit: kit), + capabilities.files?.locking != nil + else { + presentError("Server does not have the ability to lock files.") + return + } guard let itemMetadata = await fetchItemMetadata( itemRelativePath: serverPathString, account: account, kit: kit ) else { -- 2.30.2